package com.findyou;

import com.findyou.config.AppConfig2;
import com.findyou.proxy.CglibProxyFactory;
import com.findyou.proxy.JdkProxyFactory;
import com.findyou.service.AccountService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.junit4.SpringRunner;

import java.sql.SQLException;

/**
 * @Title: MyTest
 * @Author 贾金博
 * @Package com.findyou
 * @Date 2024/11/28 上午10:35
 * @description: 测试类
 */
@RunWith(SpringRunner.class) // 指定 Junit的运行环境 使用 SpringRunner 来运行测试
// 它告诉 JUnit 使用 Spring 的测试运行器来执行测试类，而不是使用默认的 JUnit 运行器。
// 因为Junit的测试是手动的去加载环境 因为我用spring的去测试
@ContextConfiguration(classes = AppConfig2.class)  // 指定 Spring 配置类 使用的是注解
public class MyTest2 {

    @Autowired
    private AccountService accountService;

    @Autowired
    private JdkProxyFactory jdkProxyFactory;

    @Autowired
    private CglibProxyFactory cglibProxyFactory;

    @Test // 加上 @Test 注解，表示该方法是一个测试方法
    public void test01() {
        accountService.transfer("FindYou1", "FindYou2", 100.0);
        System.out.println("This is a test2");
    }

    // jdk动态代理技术实现转账
    @Test
    public void test02() {
        // 拿到的是代理对象
        AccountService accountServiceJdkProxy = jdkProxyFactory.createAccountServiceJdkProxy();
        //代理对象调用接口中的方法
        accountServiceJdkProxy.transfer("FindYou1", "FindYou2", 100.0);
    }

    // cglib动态代理技术实现转账
    @Test
    public void test03() {
        AccountService accountServiceCglibProxy = cglibProxyFactory.createAccountServiceCglibProxy();
        //代理对象调用接口中的方法
        accountServiceCglibProxy.transfer("FindYou1", "FindYou2", 100.0);
    }

}

